import { _login, _getUserInfo } from './common/api/signin'
import { loading, toast } from './utils/util'
import config from './components/navbar/config'
App({
  store: {
    userinfo: null,
    phone: wx.getSystemInfoSync().model
  },
  shareInfo: {
    title: '听语悦享家',
    path: '/pages/index/index',
    imageUrl: 'http://jinhu.1juke.cn/res/Upload/AdminUpload//ShareImage/20190814183808.jpg'
  },
  getInfoByUid(uid) {
    console.log('通过uid获取用户信息')
    return new Promise((resolve, reject) => {
      _getUserInfo(uid).then(res => {
        wx.hideLoading()
        if (res.data.IsSuccess) {
          // 判断是否注册
          if (res.data.Data) {
            // 已注册
            console.log('用户已注册')
            let userinfo = res.data.Data
            this.store.userinfo = userinfo
            resolve(this.store.userinfo)
          } else {
            console.log('用户未注册')
            reject('用户未注册')
          }
        } else {
          console.log('查询失败')
          reject(res.data.Msg)
          wx.hideLoading()
          // wx.showModal({
          //   title: '对不起',
          //   content: res.data.Msg,
          //   showCancel: false
          // })
        }
      }).catch(err => {
        console.log(err)
        reject(err)
        wx.showModal({
          title: '对不起',
          content: '获取信息失败，请稍后再试',
          showCancel: false
        })
      })
    })
  },
  updateUserInfo(opt = { force: false }) {
    let { force } = opt
    return new Promise((resolve, reject) => {
      if (!force) {
        console.log('优先从app.store更新用户信息，没有则强制')
        if (this.store.userinfo) {
          resolve(this.store.userinfo)
        } else {
          this.launch().then(res => {
            resolve(this.store.userinfo)
          }).catch(err => {
            reject(err)
          })
        }
      } else {
        console.log('强制更新用户信息')
        this.launch().then(res => {
          resolve(this.store.userinfo)
        }).catch(err => {
          reject(err)
        })
      }
    })
  },
  launch() {
    let uid = wx.getStorageSync('uid')
    return new Promise((resolve, reject) => {
      /**
       * 判断本地是否有uid缓存，
       * ㈠如果有则直接通过uid请求用户信息；
       *    ❶如果返回注册过的用户信息，则通过
       *    ❷如果返回未注册过的用户信息，则跳转注册页面
       * ㈡如果没有则调用登录wx.login请求看是否有返回uid
       *    ❶如果返回包含uid，则进行上面㈠的逻辑判断
       *    ❷如果返回不包括uid，则跳转授权注册页面
       */
      if (!uid) {
        console.log('本地没有uid，则调用wx.login获取')
        // reject('本地没有uid')
        wx.login({
          success: r => {
            _login(r.code).then(res => {
              if (res.data.IsSuccess) {
                wx.setStorageSync('session_key', res.data.Data.session_key)
                if (res.data.Data.unionid) {
                  console.log('login返回了uid')
                  // 返回包含uid
                  let uid = res.data.Data.unionid
                  wx.setStorageSync('uid', uid)
                  resolve(this.getInfoByUid(uid))
                } else {
                  console.log('login没有返回uid，跳转授权')
                  reject('login没有返回uid，跳转授权')
                  // wx.redirectTo({
                  //   url: '/pages/signin/auth'
                  // })
                }
              } else {
                wx.hideLoading()
                wx.showModal({
                  title: '对不起',
                  content: res.data.Data,
                  showCancel: false
                })
                // reject(res.data.Data)
              }
            }).catch(err => {
              console.log(err)
            })
          }
        })
      } else {
        console.log('本地有uid，直接请求获取用户信息')
        resolve(this.getInfoByUid(uid))
      }
    })
  },
  loading,
  toast,
  onLaunch(res) {}
})